home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 4 / MacMania 4.toast / / Demo's / Igor Demo Pro / 1 PutContentsIn Igor Pro Folder / WaveMetrics Procedures / Analysis / WMFitFunctions < prev    next >
Text File  |  1994-02-18  |  8KB  |  297 lines

  1. | WMFitFunctions v1.1    - 11/1/93
  2. |
  3. | These functions were contributed or suggested by Igor users.
  4. | We have renamed them so that the last digit(s) is the number of coefficients.
  5. | For example, power_3 has three coefficients, w[0], w[1], and w[2].
  6. | When describing the equation, we use Kn for w[n] because it's a little easier to read.
  7. |
  8. | To use one of these functions, copy it and paste into your procedure window rather
  9. | than opening or #including this entire file; it will shorten your compile time a little.
  10.  
  11. | POLYNOMIAL FUNCTIONS
  12. | y = K0 +K1*x (Use this to hold K0 or K1 constant; built-in line fit can't do that)
  13. Function/D lineHold_ff2(w,x)
  14.     Wave/D w;Variable/D x
  15.  
  16.     return w[0]+w[1]*x
  17. End
  18.  
  19. | y = K0 +K1*x + K2*x^2 (Use this to hold K0 … K2 constant; built-in poly fit can't do that)
  20. Function/D poly_ff3(w,x)
  21.     Wave/D w;Variable/D x
  22.  
  23.     return w[0]+(w[1]+ w[2]*x)*x
  24. End
  25.  
  26. | y = K0 +K1*x + K2*x^2 +K3*x^3  (Use this to hold K0 … K3 constant; built-in poly fit can't do that)
  27. Function/D poly_ff4(w,x)
  28.     Wave/D w;Variable/D x
  29.  
  30.     return w[0]+(w[1]+(w[2]+w[3]*x)*x)*x
  31. End
  32.  
  33. | y = K0 +K1*x + K2*x^2 +K3*x^3 +K4*x^4  (Use this to hold K0 … K4 constant; built-in poly fit can't do that)
  34. Function/D poly_ff5(w,x)
  35.     Wave/D w;Variable/D x
  36.  
  37.     return w[0]+ (w[1]+ (w[2]+(w[3]+w[4]*x)*x)*x)*x
  38. End
  39.  
  40.  
  41. | EXPONENTIAL FUNCTIONS
  42.  
  43. | y= K0 + x**K1, x > 0
  44. Function/D power_ff2(w,x)
  45.     Wave/D w;Variable/D x
  46.  
  47.     return w[0] + x^w[1]
  48. End
  49.  
  50. | y= K0 + K1*x**K2, x > 0
  51. Function/D power_ff3(w,x)    
  52.     Wave/D w;Variable/D x
  53.  
  54.     return w[0] + w[1]*(x^w[2])
  55. End
  56. | y= K0 + K1**x
  57. Function/D k1RaisedX_ff2(w,x)    
  58.     Wave/D w;Variable/D x
  59.  
  60.     return w[0] + w[1]^x
  61. End
  62.  
  63. | y= K0 + K1**x
  64. Function/D k2RaisedX_3(w,x)    
  65.     Wave/D w;Variable/D x
  66.  
  67.     return w[0] + w[1]*w[2]^x
  68. End
  69.  
  70. | y = K0 + K1*exp(x/K2) + K3*exp(x/K4), similar to dblexp
  71. Function/D dblexpInv_ff5(w,x)
  72.     Wave/D w;Variable/D x
  73.  
  74.     return w[0] + w[1]*exp(x/w[2]) + w[3]*exp(x/w[4])
  75. End
  76.  
  77. | LOGARITHMIC FUNCTIONS
  78.  
  79.  
  80. | y= K0 + K1*ln(x), x > 0
  81. Function/D ln_ff2(w,x)    | NOT ln^2
  82.     Wave/D w;Variable/D x
  83.  
  84.     return w[0] + w[1]*ln(x)
  85. End
  86.  
  87. | y= K0 + K1*log(x), x > 0
  88. Function/D logBaseTen_ff2(w,x)
  89.     Wave/D w;Variable/D x
  90.  
  91.     return w[0] + w[1]*log(x)
  92. End
  93.  
  94. | y= K0 + K1*log2(x), x > 0
  95. Function/D logBaseTwo_ff2(w,x)
  96.     Wave/D w;Variable/D x
  97.  
  98.     return w[0] + w[1]*ln(x)/ln(2)    | for a different base b, replace ln(2) with ln(b).
  99. End
  100.  
  101.  
  102. | SPECIAL-PURPOSE FUNCTIONS
  103. | The following functions are classified by what they are used for,
  104. | rather than their mathematical form.
  105.  
  106. | GEOLOGIC FUNCTIONS
  107. | Dr. John D. Weeks
  108. | john_weeks@brown.edu
  109. | Here are two functions we have used in stress relaxation experiments
  110. | studying rock friction.  In these experiments a load is applied, and the
  111. | loading piston is held at a constant position.  Any creep of the sample
  112. | results in decaying stress as the (relatively) compliant loading piston
  113. | changes length.  A particular function giving stress as a function of slip
  114. | velocity (stress = c1 + c2*ln(V)) yields a velocity decay described by a
  115. | hyperbola in time:
  116.  
  117. | y = K0 /(K1+ x)
  118. Function/D hyperbola_ff2(w, x)    | see also kin2ndOrder_3 function
  119.     Wave/D w; Variable/D x
  120.     
  121.     return w[0]/(w[1] + x)
  122. End
  123.  
  124. | This function also describes the decay of rate of aftershocks after an
  125. | earthquake.  This is probably *not* a coincidence.
  126. | This decay in velocity results in the following function for decay of
  127. | stress with time:
  128.  
  129. | y = K0 + K1*ln(K2+x)
  130. Function/D logplus_ff3(w,x)    | NOT log+3
  131.     Wave/D w; Variable/D x
  132.     
  133.     return w[0]+w[1]*ln(w[2]+x)
  134. End
  135.     
  136. | KINETICS FUNCTIONS
  137. | wishart@bnl.bnl.gov (James Wishart)
  138. |
  139. | y = K0 + K1/(1+K2*x)
  140. Function/D kin2ndOrder_ff3(w, x)
  141.      Wave/D w;Variable/D x
  142.     
  143.      return w[0] + w[1]/(1+w[2]*x)
  144. End
  145.  
  146. | y = K0 + K1*exp(K2*x) + K3*exp(K4*x)
  147. Function/D KinTwo1stOrder_ff5(w, x)   |Returns two first orders - this is similar to dblexp
  148.     Wave/D w;Variable/D x
  149.     
  150.      return w[0] + w[1]*exp(w[2]*x)+ w[3]*exp(w[4]*x)
  151. End
  152.  
  153. | y = K0 +  K1/(1+K2*x) + K3*exp(K4*x)
  154. Function/D Kin1st2ndOrder_ff5(w, x)   |Returns second and first orders
  155.     Wave/D w;Variable/D x
  156.     
  157.      return w[0] + w[1]/(1+w[2]*x)+ w[3]*exp(w[4]*x)
  158. End
  159.  
  160. | y = K0  + K1*exp(K2*x) + K3*exp(K4*x) + K5*x
  161. Function/D KinTwo1stOrderSlope_ff6(w, x)    |Returns two first orders plus slope
  162.      Wave/D w;Variable/D x    |Slope compensates for baseline drift or 
  163.                                 | a slow subsequent kinetic process
  164.     
  165.      return w[0] + w[1]*exp(w[2]*x)+ w[3]*exp(w[4]*x)+ w[5]*x
  166. End
  167.  
  168. | y = K0  + K1*exp(K2*x) + K3*x
  169. Function/D Kin1stOrderSlope_ff4(w, x)   |Returns first order plus slope
  170.     Wave/D w;Variable/D x
  171.     
  172.     return w[0] + w[1]*exp(w[2]*x)+ w[3]*x
  173. End
  174.  
  175. | y = K0  +  K1/(1+K2*x) + K3*x
  176. Function/D Kin2ndOrderSlope_ff4(w, x)   |Returns second order plus slope
  177.     Wave/D w;Variable/D x
  178.     
  179.      return(w[0] + w[1]/(1+w[2]*x)+ w[3]*x )
  180. End
  181.  
  182. | BIOLOGICAL/THERMODYNAMICS FUNCTIONS
  183. |
  184. | Szoke Sz, Belgium
  185. | "Szvke Sz." <szoke@geru.ucl.ac.be>
  186. |  The following equations are used in water adsorption isotherms, etc.
  187. | their inverse (x = f(y)) could be used as growing functions of living things
  188. Function/D adsorpA_ff2(w, x)
  189.         Wave/D w; Variable/D x
  190.  
  191.     return ln(ln(1/x) / w[1]) / ln(w[0])
  192. End
  193.  
  194. Function/D adsorpB_ff2(w, x)
  195.         Wave/D w; Variable/D x
  196.  
  197.     return((-w[1] / ln(x))^(1 / w[0]))
  198. End
  199.  
  200. Function/D adsorpC_ff2(w, x)
  201.         Wave/D w; Variable/D x
  202.  
  203.     return((-w[1] / ln(1 - x))^(1 / w[0]))
  204. End
  205.  
  206. Function/D adsorpD_ff2(w, x)
  207.         Wave/D w; Variable/D x
  208.  
  209.     return(w[0] * (x / (1 - x)) + w[1])
  210. End
  211.  
  212. Function/D adsorpE_ff2(w, x)
  213.         Wave/D w; Variable/D x
  214.  
  215.     return(w[0] / ln(x) + w[1])
  216. End
  217.  
  218. Function/D adsorpF_ff2(w, x)
  219.         Wave/D w; Variable/D x
  220.  
  221.     return(w[1] * (x / (1 - x))^w[0])
  222. End
  223.  
  224. Function/D adsorpG_ff2(w, x)
  225.         Wave/D w; Variable/D x
  226.  
  227.     return(w[1] - w[0] * ln(1 - x))
  228. End
  229.  
  230. Function/D adsorpG_ff7(w, x)
  231.         Wave/D w; Variable/D x
  232.  
  233.     return(w[1] + (w[2] + w[3] * x) * (tanh(w[4] * (x - w[5])) + w[6]))
  234. End
  235.  
  236. | temperature sensors can give Kelvin temperature versus electrical resistance as :
  237. Function/D tempKelvinFromRes_ff4(w, Res)
  238.     Wave/D w; Variable/D Res
  239.     
  240.     return(1/(w[0] + w[1] * (Log(Res)) + w[2] * (Log(Res))^2 + w[3] * (Log(Res))^3))
  241. End
  242.  
  243. | SIGMOIDS
  244. | Basic power sigmoid
  245. |  Alan Saul <SAUL@vms.cis.pitt.edu>
  246. Function/D Sigmoid_ff3(w,xx)    
  247.     Wave/D w            | w[0] is saturation amplitude
  248.                         | w[1] is exponent, should be restricted
  249.                         | w[2] is x value at 50% of saturation
  250.     Variable/D xx        | xx could be lots of things, e.g. contrast
  251.  
  252.     Variable/D tmp
  253.     tmp=w[2]^w[1]+xx^w[1]
  254.     Return w[0]*xx^w[1]/tmp
  255. End
  256.  
  257. | This tanh function is the solution to the differential equation x'=x(1-x).
  258. | It comes up in chemical waves or other such reaction-diffusion equations. 
  259. |  Alan Saul <SAUL@vms.cis.pitt.edu>
  260. Function tanh_ff3(w,xx)    
  261.     wave/D w    | w[0] is saturation amplitude
  262.             | w[1] is slope at 50% point
  263.             | w[2] is x value at 50% of saturation
  264.     variable/D xx    | xx could be time, space, ...
  265.  
  266.     Return w[0]/(1+exp(-w[1]*(xx-w[2])))
  267. End
  268.  
  269. | PEAK FUNCTIONS
  270. | Voigt Approximation
  271. | For w[4]==1, this is a Lorentzian, and for w[4] -> infinity it is a Gaussian.
  272. |     (actually for w[4]>50, it is really close to a Gaussian already).
  273. | For this function, center = w[2]
  274. |   Full Width at Half Maximum= 2*w[3]*sqrt((2^(1/w[4])-1)*w[4])
  275. | For a Gaussian,  FWHM = 2*w[4]*sqrt(ln(2))
  276. | For a Lorentzian, FWHM = 2*sqrt(w[4])
  277. | zzt@ornl.gov (Jon Tischler)
  278. Function/D Pearson_ff5(w,x)
  279.     Wave/D w; Variable/D x
  280.  
  281.     return w[0]+w[1] / (  1 + (x-w[2])^2/w[4]/w[3]^2  )^w[4]
  282. End
  283.  
  284. | Difference of Gaussians
  285. |  Alan Saul <SAUL@vms.cis.pitt.edu>
  286. Function/D DoG_ff4(w,xx)
  287.     Wave/D w        | w[0] is center strength, w[1] is center width
  288.                     | w[2] is surround strength, w[3] surround width
  289.     Variable/D xx    | xx could be spatial position or a frequency
  290.  
  291.     Variable/D center,surround
  292.     center=w[0]*exp(-0.5*(xx/w[1])^2)
  293.     surround=w[2]*exp((-0.5*xx/w[3])^2)
  294.     Return center-surround
  295. End
  296.